﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL_MechSys;
using DTO_MechSys;

namespace FORMS_MechSys
{
    public partial class frmSelecionarGenerico : Form
    {
        List<DTOCliente> ListClientes;
        List<DTOCategoria> ListCategoria;
        List<DTOFornecedor> ListFornecedor;
        List<DTOVeiculo> ListVeiculos;
        List<DTOFuncionario> ListFuncionarios;
        List<DTOOrdem> ListOrdem;
        BLLCliente bllCliente = new BLLCliente();
        BLLCategoria bllCategoria = new BLLCategoria();
        BLLFornecedor bllFornecedor = new BLLFornecedor();
        BLLVeiculo bllVeiculo = new BLLVeiculo();
        BLLFuncionario bllFuncionario = new BLLFuncionario();
        BLLOrdem bllOrdem = new BLLOrdem();

        private int clienteID;
        
        
        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();
        BLLCor bllCor = new BLLCor();

        string item;

        public frmSelecionarGenerico(string Item)
        {
            InitializeComponent();
            SetColors();
            item = Item;
            switch (item)
            {
                case "Categoria": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridCategoria();break;

                case "Fornecedor": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridFornecedor(); break;
                case "Venda": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridVenda(); btnCadastrar.Visible = false; break;
                case "Veiculo": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridVeiculo(); break;
                case "Funcionário": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridFuncionario(); ckbTodosFuncionarios.Visible = true; break;
                default: break;
            }

            lblTitulo.Text += " " + item; 
            this.lblTitulo.Location = new System.Drawing.Point((int)((this.Size.Width - this.lblTitulo.Size.Width) / 2), 12);

                    
        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");
            toolStrip1.ForeColor = tlpBarraTop.BackColor = tlpOpcoesAdicionais.BackColor = toolStrip1.BackColor = lblTitulo.BackColor =
                btnCadastrar.BackColor =  dtoCorPrincipal.Cor;

            dtoCorFundo = bllCor.Buscar("Fundo");
            tableLayoutPanel1.BackColor = dtoCorFundo.Cor;

            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dtGrid.BackgroundColor = dtoCorDataGrid.Cor;

            dtoCorLetra = bllCor.Buscar("Letra");
            btnCadastrar.ForeColor = ckbTodosFuncionarios.ForeColor = toolStripButtonSair.ForeColor =
                lblTitulo.ForeColor = dtoCorLetra.Cor;


        }

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        public DataTable PopulaGridCategoria()
        {
            DataRow dataRow;
            DataTable dataTableGridView = new DataTable();
            ListCategoria = bllCategoria.BuscarCategoriasCadastradas();

            try
            {
                if (ListCategoria.Count > 0)
                {
                    dataTableGridView.Columns.Add("CategoriaID", typeof(int));
                    dataTableGridView.Columns.Add("Categoria", typeof(string));


                    foreach (DTOCategoria dtoCategoria in ListCategoria)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["CategoriaID"] = dtoCategoria.CategoriaID;
                        dataRow["Categoria"] = dtoCategoria.Descricao;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Não foi possível carregar os dados para o grid!");
            }
            return dataTableGridView;
        }
       
        public DataTable PopulaGridVenda()
        {
            DataRow dataRow;
            DataTable dtAux = new DataTable();
            ListOrdem = bllOrdem.BuscarOrdem(clienteID);

            try
            {
                if (ListOrdem.Count > 0)
                {
                    dtAux.Columns.Add("OrdemID", typeof(int));
                    dtAux.Columns.Add("Data", typeof(string));
                    dtAux.Columns.Add("Valor", typeof(string));
                    dtAux.Columns.Add("Forma de Pagamento", typeof(string));
                    dtAux.Columns.Add("Número de Parcelas", typeof(string));
                    dtAux.Columns.Add("Vencimento", typeof(string));



                    foreach (DTOOrdem dtoOrdem in ListOrdem)
                    {
                        dataRow = dtAux.NewRow();

                        dataRow["OrdemID"] = dtoOrdem.OrdemID;
                        dataRow["Data"] = dtoOrdem.Data.ToShortDateString();
                        dataRow["Valor"] = dtoOrdem.Valor;
                        dataRow["Forma de Pagamento"] = dtoOrdem.FormaPagamento;
                        dataRow["Número de Parcelas"] = dtoOrdem.NumeroParcela;
                        dataRow["Vencimento"] = dtoOrdem.Vencimento.ToShortDateString();

                        // Adiciona linha ao DataTable.
                        dtAux.Rows.Add(dataRow);

                    }
                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Não foi possível carregar os dados para o grid!");
            }
            return dtAux;
        }

        public DataTable PopulaGridFornecedor()
        {
            DataRow dataRow;
            DataTable dataTableGridView = new DataTable();
            ListFornecedor = bllFornecedor.BuscarFornecedoresCadastrados();

            try
            {
                if (ListFornecedor.Count > 0)
                {
                    dataTableGridView.Columns.Add("FornecedorID", typeof(int));
                    dataTableGridView.Columns.Add("Razao", typeof(string));
                    dataTableGridView.Columns.Add("CNPJ", typeof(string));
                    dataTableGridView.Columns.Add("Telefone", typeof(string));
                    dataTableGridView.Columns.Add("Representante", typeof(string));


                    foreach (DTOFornecedor dtoFornecedor in ListFornecedor)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["FornecedorID"] = dtoFornecedor.FornecedorID;
                        dataRow["Razao"] = dtoFornecedor.Razao;
                        dataRow["CNPJ"] = dtoFornecedor.CNPJ;
                        dataRow["Telefone"] = dtoFornecedor.Telefone;
                        dataRow["Representante"] = dtoFornecedor.Representante;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Não foi possível carregar os dados para o grid!");
            }
            return dataTableGridView;
        }

        public DataTable PopulaGridCliente()
        {
            DataRow dataRow;
            DataTable dataTableGridView = new DataTable();
            ListClientes = bllCliente.BuscarClientesCadastrados();

            try
            {
                if (ListClientes.Count > 0)
                {
                    dataTableGridView.Columns.Add("ClienteID", typeof(int));
                    dataTableGridView.Columns.Add("Nome", typeof(string));
                    dataTableGridView.Columns.Add("Sobrenome", typeof(string));
                    dataTableGridView.Columns.Add("CPF", typeof(string));
                    dataTableGridView.Columns.Add("Nascimento", typeof(string));
                    dataTableGridView.Columns.Add("Telefone", typeof(string));
                    dataTableGridView.Columns.Add("Celular", typeof(string));
                    dataTableGridView.Columns.Add("Email", typeof(string));
                    dataTableGridView.Columns.Add("EnderecoID", typeof(int));


                    foreach (DTOCliente dtoCliente in ListClientes)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["ClienteID"] = dtoCliente.ClienteID;
                        dataRow["Nome"] = dtoCliente.Nome;
                        dataRow["Sobrenome"] = dtoCliente.Sobrenome;
                        dataRow["CPF"] = dtoCliente.CPF;
                        dataRow["Nascimento"] = string.Format("{0:d}", dtoCliente.DataNascimento);
                        dataRow["Telefone"] = dtoCliente.Telefone;
                        dataRow["Celular"] = dtoCliente.Celular;
                        dataRow["Email"] = dtoCliente.Email;
                        dataRow["EnderecoID"] = dtoCliente.EnderecoID;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Não foi possível carregar os dados para o grid!");
            }
            return dataTableGridView;
        }

        public DataTable PopulaGridVeiculo()
        {
            DataRow dataRow;
            DataTable dataTableGridView = new DataTable();
            ListVeiculos = bllVeiculo.BuscarVeiculosExcetoOficina();
            try
            {
                if (ListVeiculos.Count > 0)
                {
                    dataTableGridView.Columns.Add("VeiculoID", typeof(int));
                    dataTableGridView.Columns.Add("Placa", typeof(string));
                    dataTableGridView.Columns.Add("Marca", typeof(string));
                    dataTableGridView.Columns.Add("Modelo", typeof(string));
                    dataTableGridView.Columns.Add("Ano Fabricação", typeof(string));
                    dataTableGridView.Columns.Add("Ano Modelo", typeof(string));


                    foreach (DTOVeiculo dtoVeiculo in ListVeiculos)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["VeiculoID"] = dtoVeiculo.VeiculoID;
                        dataRow["Placa"] = dtoVeiculo.Placa;
                        dataRow["Marca"] = dtoVeiculo.Marca;
                        dataRow["Modelo"] = dtoVeiculo.Modelo;
                        dataRow["Ano Fabricação"] = dtoVeiculo.AnoFab;
                        dataRow["Ano Modelo"] = dtoVeiculo.AnoMod;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

            }
            catch (Exception)
            {
            }
            return dataTableGridView;

        }

        public DataTable PopulaGridFuncionario()
        {
            DataRow dataRow;
            DataTable dataTableGridView = new DataTable();
            if(!ckbTodosFuncionarios.Checked)
                ListFuncionarios = bllFuncionario.BuscarFuncionariosCadastrados();
            try
            {
                if (ListFuncionarios.Count > 0)
                {
                    dataTableGridView.Columns.Add("FuncionarioID", typeof(int));
                    dataTableGridView.Columns.Add("Nome Completo", typeof(string));
                    dataTableGridView.Columns.Add("Cargo", typeof(string));


                    foreach (DTOFuncionario dtoFuncionario in ListFuncionarios)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["FuncionarioID"] = dtoFuncionario.FuncionarioID;
                        dataRow["Nome Completo"] = dtoFuncionario.Nome + " " + dtoFuncionario.Sobrenome;
                        dataRow["Cargo"] = dtoFuncionario.Cargo;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }
                }

            }
            catch (Exception)
            {
            }
            return dataTableGridView;

        }

        private void dtGridSelecionaCliente_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            switch (item)
            {
                case "Cliente":
                    if (e.RowIndex != -1)
                    {
                        string nome = (string)dtGrid.Rows[e.RowIndex].Cells["Nome"].Value;
                        string sobrenome = (string)dtGrid.Rows[e.RowIndex].Cells["Sobrenome"].Value;
                        BLLUtilitarios.clienteNome = string.Format("{0} {1}", nome, sobrenome);
                        BLLUtilitarios.clienteID = (int)dtGrid.Rows[e.RowIndex].Cells["ClienteID"].Value;
                        this.Close();
                    }
                    break;
                case "Categoria":
                    if (e.RowIndex != -1)
                    {
                        BLLUtilitarios.categoriaDescricao = (string)dtGrid.Rows[e.RowIndex].Cells["Categoria"].Value;
                        BLLUtilitarios.categoriaID = (int)dtGrid.Rows[e.RowIndex].Cells["CategoriaID"].Value;
                        this.Close();
                    }
                    break;
                case "Fornecedor":
                    if (e.RowIndex != -1)
                    {
                        BLLUtilitarios.fornecedorNome = (string)dtGrid.Rows[e.RowIndex].Cells["Razao"].Value;
                        BLLUtilitarios.fornecedorID = (int)dtGrid.Rows[e.RowIndex].Cells["FornecedorID"].Value;
                        this.Close();
                    }
                    break;
                case "Veiculo":
                    if (e.RowIndex != -1)
                    {
                        BLLUtilitarios.veiculoID = (int)dtGrid.Rows[e.RowIndex].Cells["VeiculoID"].Value;
                        string marca = (string)dtGrid.Rows[e.RowIndex].Cells["Marca"].Value;
                        string modelo = (string)dtGrid.Rows[e.RowIndex].Cells["Modelo"].Value;
                        BLLUtilitarios.veiculoNome = string.Format("{0} {1}", marca, modelo);
                        BLLUtilitarios.placa = (string)dtGrid.Rows[e.RowIndex].Cells["Placa"].Value;
                        this.Close();
                    }
                    break;
                case "Funcionário":
                    if (e.RowIndex != -1)
                    {
                        BLLUtilitarios.funcionarioID = (int)dtGrid.Rows[e.RowIndex].Cells["FuncionarioID"].Value;
                        BLLUtilitarios.funcionarioNome = dtGrid.Rows[e.RowIndex].Cells["Nome Completo"].Value.ToString();
                        this.Close();
                    }
                    break;
                case "Venda":
                    if (e.RowIndex != -1)
                    {
                        BLLUtilitarios.ordemDevolucaoId = (int)dtGrid.Rows[e.RowIndex].Cells["OrdemID"].Value;
                        BLLUtilitarios.ordemDevolucaoDescricao = dtGrid.Rows[e.RowIndex].Cells["OrdemID"].Value.ToString() + " " +
                            dtGrid.Rows[e.RowIndex].Cells["Data"].Value.ToString() + " R$" + string.Format("{0:0.00}",
                            dtGrid.Rows[e.RowIndex].Cells["Valor"].Value.ToString());
                        this.Close();
                    }
                    break;
                default: break;
            }

        }

        private void btnCadastrar_Click(object sender, EventArgs e)
        {
            switch (item)
            {
                case "Cliente":
                    new frmClienteCadastro().ShowDialog();
                    break;
                case "Categoria":
                    new frmCategoriaCadastro().ShowDialog();
                    break;
                case "Fornecedor":
                    new frmFornecedorCadastro().ShowDialog();
                    break;
                case "Veiculo":
                    new frmVeiculoCadastro().ShowDialog();
                    break;
                case "Funcionário":
                    new frmFuncionarioCadastro().ShowDialog();
                    break;
                default: break;
            }
            switch (item)
            {
                case "Categoria": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridCategoria(); break;
                case "Fornecedor": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridFornecedor(); break;
                case "Veiculo": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridVeiculo(); break;
                case "Funcionário": dtGrid.DataSource = null;
                    dtGrid.DataSource = PopulaGridFuncionario(); ckbTodosFuncionarios.Visible = true; break;
                default: break;
            }
        }

    }
}
